// 接口(interface)

interface Human {
    name: string ,
    gender: string,
    // 抽象方法
    eat( food: string ): void
}

// 使用抽象类来实现接口
abstract class Sinaean implements Human {
    name: string ;
    gender: string ;
    constructor( name: string , gender: string ){
        this.name = name ;
        this.gender = gender ;
    }
    // 抽象类可以不实现接口中的方法
    abstract eat( food: string ): void 
}

// 使用具体类继承抽象类
class Han extends Sinaean {
    constructor( name: string , gender: string ){
        super( name , gender );
    }
    // 实现抽象方法
    eat( food: string ): void {
        console.log( `中国汉族人民${this.name}大部分情况下是用筷子吃${food}` );
    }
}

let h = new Han( '王燕' , '靓妹' );
h.eat( '饺子' );

// 使用具体类(非抽象类)实现接口
class India implements Human {
    name: string ;
    gender: string ;
    constructor( name: string , gender: string ){
        this.name = name ;
        this.gender = gender ;
    }
    // 实现抽象方法
    eat( food: string ): void {
        console.log( `印度人民${this.name}大部分情况下是用手抓着吃${food}` );
    }
}

let x = new India( '莫迪老仙' , '靓仔' );
x.eat( '火锅' );


// 用实例实现接口
let instance: Human = {
    name: '泽联斯基' ,
    gender: '靓仔' ,
    eat(food){
        console.log(`${this.name}吃${food}`);
    }
}

instance.eat( '米田共' );